3.1.5 作用域链

作用域

作用域是程序源代码中定义变量的区域。

作用域规定了如何查找变量,也就是确定当前执行代码对变量的访问权限。

说到作用域,js 分为词法作用域(静态作用域)和动态作用域

  • 词法作用域:函数的作用域在函数定义的时候就决定了。
  • 动态作用域,函数的作用域是在函数调用的时候才决定的。

作用域链

当查找变量的时候,会先从当前上下文的变量对象中查找,
如果没有找到,就会从父级(词法层面上的父级)执行上下文的变量对象中查找,一直找到全局上下文的变量对象,也就是全局对象。
这样由多个执行上下文的变量对象构成的链表就叫做作用域链。

对于每个执行上下文,都有三个重要属性:

  • 变量对象(Variable object,VO)
  • 作用域链(Scope chain)
  • this

参考